 <?php                                                                                                                                            
class  System                                                                                                                                     
{                                                                                                                                                 
    function  currentTimeMillis()                                                                                                                 
    {                                                                                                                                             
        list($usec,  $sec)  =  explode("  ",microtime());                                                                                         
        return  $sec.substr($usec,  2,  3);                                                                                                       
    }                                                                                                                                             
}                                                                                                                                                 
class  NetAddress                                                                                                                                 
{                                                                                                                                                 
    var  $Name  =  'localhost';                                                                                                                   
    var  $IP  =  '127.0.0.1';                                                                                                                     
    function  getLocalHost()  //  static                                                                                                          
    {                                                                                                                                             
        $address  =  new  NetAddress();                                                                                                           
        $address->Name  =  $_ENV["COMPUTERNAME"];                                                                                                 
        $address->IP  =  $_SERVER["SERVER_ADDR"];                                                                                                 
        return  $address;                                                                                                                         
    }                                                                                                                                             
    function  toString()                                                                                                                          
    {                                                                                                                                             
        return  strtolower($this->Name.'/'.$this->IP);                                                                                            
    }                                                                                                                                             
}                                                                                                                                                 
class  Random                                                                                                                                     
{                                                                                                                                                 
    function  nextLong()                                                                                                                          
    {                                                                                                                                             
        $tmp  =  rand(0,1)?'-':'';                                                                                                                
        return  $tmp.rand(1000,  9999).rand(1000,  9999).rand(1000,  9999).rand(100,  999).rand(100,  999);                                       
    }                                                                                                                                             
}                                                                                                                                                 
//  三段                                                                                                                                          
//  一段是微秒  一段是地址  一段是随机数                                                                                                          
class  Guid                                                                                                                                       
{                                                                                                                                                 
    var  $valueBeforeMD5;                                                                                                                         
    var  $valueAfterMD5;                                                                                                                          
    function  Guid()                                                                                                                              
    {                                                                                                                                             
        $this->getGuid();                                                                                                                         
    }                                                                                                                                             
    //                                                                                                                                            
    function  getGuid()                                                                                                                           
    {                                                                                                                                             
        $address  =  NetAddress::getLocalHost();                                                                                                  
        $this->valueBeforeMD5  =  $address->toString().':'.System::currentTimeMillis().':'.Random::nextLong();                                    
        $this->valueAfterMD5  =  md5($this->valueBeforeMD5);                                                                                      
    }                                                                                                                                             
    function  newGuid()                                                                                                                           
    {                                                                                                                                             
        $Guid  =  new  Guid();                                                                                                                    
        return  $Guid;                                                                                                                            
    }                                                                                                                                             
    function  toString()                                                                                                                          
    {                                                                                                                                             
        $raw  =  strtoupper($this->valueAfterMD5);                                                                                                
        return  substr($raw,0,8).'-'.substr($raw,8,4).'-'.substr($raw,12,4).'-'.substr($raw,16,4).'-'.substr($raw,20);                            
    }                                                                                                                                             
}                                                                                                                                                 